home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / HAM_RAD / PROPAGAT / 1004A.ZIP / MOON-SEK.BAS < prev    next >
BASIC Source File  |  1987-05-12  |  10KB  |  241 lines

  1. 1 '    *** MOON TRACKING PROGRAM ***  from "Amateur Radio Software"
  2. 2 '    by John Morris, GM4ANB (c) RSGB (available from ARRL).
  3. 3 '    For full explanation of astronomical aspects, read the book!
  4. 4 '    Microsoft BASIC version with mods by G3SEK and G4PMK, September 1983
  5. 5 '    Sky temperature and input routines by G3SEK, 1984
  6. 6 '
  7. 7 ESC$=CHR$(27): FF$=CHR$(12): CR$=CHR$(13) ' standard printer control codes.
  8. 8 '   Setup string for Centronics PS240. Use LPINIT$="" for Epson compatibles.
  9. 9 LPINIT$ = ESC$+CR$+"P" +CR$+CR$ +ESC$+"x"+CHR$(2) +ESC$+FF$+CHR$(70)
  10. 10 PI=3.141592654000005# :TP=PI*2:PT=PI/2
  11. 20 RD=180/PI:DR=PI/180
  12. 30 C1=.9174640600000014#:S1=.397818675#
  13. 40 DIM SKY(24,6):GOSUB 15000
  14. 50 DEF FNA(X)=SGN(X)*INT(10*RD*ABS(X)+.5)/10
  15. 60 DEF FNB(X)=TP*(X/TP-INT(X/TP))
  16. 70 DEF FNC(X)=X-INT(X)
  17. 80 PRINT:PRINT
  18. 89 '   Change Drayton in line 90 to your own home location.
  19. 90 INPUT"Press [return] if QTH is Drayton. Input N for new QTH. ",T$
  20. 91 '   Change N  and E in line 95 to home lat and long in RADIANS north of
  21. 92 '   equator and *EAST* of Greenwich.
  22. 94 '   Southern and western hemispheres are NEGATIVE.
  23. 95 PRINT:PRINT:IF T$<>"N" THEN N=.90108:E=-.022835:GOTO 300
  24. 100 INPUT"   Latitude (whole degrees)   : ",T1
  25. 110 INPUT"            (decimal minutes) : ",T2
  26. 120 INPUT"       North or South?  (N/S) : ",T$
  27. 130 T$=LEFT$(T$,1):IF T$<>"N" AND T$<>"S" GOTO 120
  28. 140 N=DR*(T1+T2/60):IF T$="S" THEN N=-N
  29. 150 INPUT"  Longitude (whole degrees)   : ",T1
  30. 160 INPUT "           (decimal minutes) : ",T2
  31. 170 INPUT "      East or West?    (E/W) : ",T$
  32. 180 T$=LEFT$(T$,1):IF T$<>"E" AND T$<>"W" GOTO 170
  33. 190 E=DR*(T1+T2/60):IF T$="W" THEN E=-E
  34. 192 GOTO 300
  35. 199 '   RE-ENTRY MENU
  36. 200 PRINT:INPUT"Repeat (Y/N)?    <return=Y> : ",T$:IF T$="N" OR T$="n" THEN END
  37. 205 IP=0:INPUT "Printout (Y/N)?  <return=N> : ",T$:IF T$="Y" OR T$="y" THEN IP=-1:LPRINT LPINIT$;
  38. 210 PRINT:PRINT:PRINT"Old parameters were:":PRINT"Start date         ";ODY;"/";OMN;"/";OYR
  39. 220 PRINT"Start time         ";OT1:PRINT"Interval (mins)    ";ODT:PRINT"Moonsets           ";OSS
  40. 230 PRINT:PRINT"Input   0    to repeat old calculation"
  41. 232 PRINT"        1    to change    Start date          including-"
  42. 234 PRINT"        2    to change    Start time          including-"
  43. 236 PRINT"        3    to change    Interval            including-"
  44. 238 PRINT"        4    to change    Number of moonsets":PRINT"or      9    to exit":PRINT:PRINT
  45. 240 INPUT": ",NRPT:IF NRPT<0 GOTO 240 ELSE IF NRPT>4 THEN END
  46. 245 IF NRPT=0 THEN DY=ODY:MN=OMN:YR=OYR:GOSUB 9800:GOSUB 8000:T1=OT1:DT=ODT:SS=OSS:GOTO 420
  47. 250 IF NRPT=1 GOTO 300
  48. 260 IF NRPT=2 THEN DY=ODY:MN=OMN:YR=OYR:GOSUB 9800:GOSUB 8000:GOTO 400
  49. 270 IF NRPT=3 THEN DY=ODY:MN=OMN:YR=OYR:GOSUB 9800:GOSUB 8000:T1=OT1:GOTO 410
  50. 280 IF NRPT=4 THEN DY=ODY:MN=OMN:YR=OYR:GOSUB 9800:GOSUB 8000:T1=OT1:DT=ODT:GOTO 415
  51. 290 PRINT CHR$(7):GOTO 240
  52. 300 INPUT"Day of month (1-31)                : ",DY:IF DY=0 THEN GOTO 300 ELSE ODY=DY
  53. 310 INPUT"Month number (1-12)                : ",MN:IF MN=0 THEN GOTO 310 ELSE OMN=MN
  54. 320 INPUT"Year               <return = 1987> : ",YR:IF YR=0 THEN YR=1987
  55. 325 IF YR<100 THEN YR=YR+1900
  56. 330 OYR=YR:GOSUB 9800
  57. 340 GOSUB 8000
  58. 350 PRINT:PRINT
  59. 400 INPUT"GMT start (hhmm)   <return = 0000> : ",T1:OT1=T1
  60. 410 INPUT"Interval  (minutes)  <return = 60> : ",DT:IF DT=0 THEN DT=60
  61. 411 ODT=DT
  62. 415 INPUT"Number of moonsets    <return = 1> : ",SS:IF SS=0 THEN SS=1
  63. 416 OSS=SS
  64. 420 ST=0:UP=0:T1=T1/100
  65. 430 GM=(60*INT(T1)+FNC(T1)*100)/60
  66. 440 DT=DT/60
  67. 1000 GOSUB 8100:GOSUB 8200
  68. 1005 MN$=MID$("JanFebMarAprMayJunJulAugSepOctNovDec",3*MN-2,3)
  69. 1010  PRINT:PRINT D$,DY;" ";MN$;" ";YR
  70. 1020 PRINT:PRINT
  71. 1100 PRINT"  GMT";TAB(15);"AZIMUTH";TAB(25);"ELEVATION";TAB(43);"ECHO(HZ)";TAB(61);"SKY(K)"
  72. 1200 IF IP=-1 THEN GOSUB 11010
  73. 2000 TM=GM:GOSUB 9500:GOSUB 9700
  74. 2100 GOSUB 7000:GOSUB 9000
  75. 2110 GOSUB 9100:GOSUB 7200:GOSUB 8900:IF ST>=SS GOTO 200
  76. 2120 IF CE<0 GOTO 3000
  77. 2130 GOSUB 9200:EL=CE:GOSUB 7300
  78. 2135 IF MT=30 OR MT=0 THEN PRINT
  79. 2140 PRINT  HR;":";MT;TAB(16);
  80. 2150 PRINT USING "###.#"; FNA(AZ);
  81. 2160 PRINT TAB(28);:PRINT USING "##.#";FNA(EL);:PRINT TAB(45);INT(DV);:GOSUB 15100
  82. 2170 IF IP=-1 THEN GOSUB 12135
  83. 3000 GM=GM+DT:IF GM<24 GOTO 2000
  84. 3010 GM=GM-24:DN=DN+1:IF GM<24 GOTO  1000
  85. 3020 GOTO 3010
  86. 6000 D=DN+GM/24
  87. 6010 MS=TP*FNC(D/365.242 - .010452395#)
  88. 6020 MA=MS:EO=.016718
  89. 6030 GOSUB 10000
  90. 6040 EW=TA+4.932237686000004#
  91. 6050 EN=0:RETURN
  92. 6100 D=DN:GOSUB 6010:GOSUB 9000:GOSUB 9400
  93. 6110 T4=TR:T5=TS
  94. 6120 EW=EW+.017203:GOSUB 9000:GOSUB 9400
  95. 6130 GS=-E*24/TP+(24.07*T4/(24.07+T4-TR))
  96. 6140 GOSUB 9600:TR=TM
  97. 6150 GS=-E*24/TP+(24.07*T5/(24.07+T5-TS))
  98. 6160 GOSUB 9600:TS=TM
  99. 6170 RETURN
  100. 7000 D=DN+GM/24
  101. 7010 EW=FNB(1.134193#+D*.2299715060000012#)
  102. 7020 MM=FNB(1.319238#+D*.228027135#)
  103. 7030 T1=FNB(6.217512000000011#+D*.01720196977#)
  104. 7040 T2=2*FNB(2.550677#+D*.212768711#)
  105. 7050 T3=FNB(4.7652214#+D*.230895723#)
  106. 7060 EW=EW+.01148*SIN(T2)+.10976*SIN(MM)-.022235*SIN(MM-T2)
  107. 7070 EW=EW-.003246*SIN(T1)+.003735*SIN(2*MM)-.0019897*SIN(2*T3)
  108. 7080 EW=EW-.0010297*SIN(2*MM-T2)-.0009948*SIN(MM+T1-T2)
  109. 7090 EN=T3+.011507*SIN(T2)+.10873924#*SIN(MM)-.0222006*SIN(MM-T2)
  110. 7100 EN=.0897797*SIN(EN)-.002548*SIN(T3-T2)
  111. 7110 RETURN
  112. 7200 RO=.996986/(1+.0549*COS(MM+.10976*SIN(MM)))
  113. 7210 CE=EL-RO*.0166*COS(EL)
  114. 7220 RETURN
  115. 7300 T2=.10976
  116. 7310 T1=MM+T2*SIN(MM)
  117. 7320 DV=.01255*RO*RO*SIN(T1)*(1+T2*COS(MM))
  118. 7330 DV=DV*4449
  119. 7340 T1=6378:T2=384401!
  120. 7350 T3=T1*T2*(COS(DC)*COS(N)*SIN(LH))/SQR(T2*T2-T2*T1*SIN(EL))
  121. 7360 DV=DV+T3*.0753125
  122. 7370 DV=-DV*2*432/299.8:'   Doppler (Hz); *2 is for echo; F = 432 MHz
  123. 7380 RETURN
  124. 7400 SI=SIN(LH)*COS(DC)*COS(N)
  125. 7410 CO=SIN(N)-SIN(DC)*SIN(EL)
  126. 7420 GOSUB 9900:PO=TH
  127. 7430 RETURN
  128. 8000 T1=YR:T2=MN
  129. 8010 IF T2>2.5 GOTO 8030
  130. 8020 T1=T1-1:T2=T2+12
  131. 8030 DN=INT(365.25*(T1-1980))-INT(T1/100)+INT(T1/400)-16
  132. 8040 DN=DN+DY+30*T2+INT(.6*T2-.3)
  133. 8050 RETURN
  134. 8100 T1=INT(DN-7*INT(DN/7)+.5)
  135. 8110 D$=MID$("   MON  TUESWEDNES THURS   FRI SATUR   SUN",6*T1+1,6)+"DAY"
  136. 8120 RETURN
  137. 8200 T2=INT(DN-39410!)
  138. 8210 T1=INT((T2+32044.8)/36524.3)
  139. 8220 T1=T1+T2-INT(T1/4)+1486
  140. 8230 YR=INT((T1-122.1)/365.25)
  141. 8240 T1=T1-INT(365.25*YR)
  142. 8250 MN=INT(T1/30.6001)
  143. 8260 DY=T1-INT(30.6001*MN)
  144. 8270 YR=YR+2084:MN=MN-1
  145. 8280 IF MN<12.5 GOTO 8300
  146. 8290 YR=YR+1:MN=MN-12
  147. 8300 RETURN
  148. 8900 IF CE>0 THEN UP=1: RETURN
  149. 8910 IF CE=<0 AND UP=0 THEN RETURN
  150. 8920 IF CE=<0 AND UP=1 THEN ST=ST+1: UP=0
  151. 8930 GOSUB 7200
  152. 8940 PRINT TAB(40);:PRINT "DEC ";:PRINT USING "###.#";FNA(DC):PRINT TAB(40);
  153. 8950 PRINT"SIGNALS ";:PRINT USING "##.#";FNA(-17.37*DR*LOG(RO));:PRINT" dB"
  154. 8960 IF IP=-1 THEN LPRINT FF$
  155. 8970 RETURN
  156. 9000 SI=C1*SIN(EN)+S1*COS(EN)*SIN(EW)
  157. 9010 CO=SQR(1-SI*SI):GOSUB 9900
  158. 9020 DC=TH
  159. 9030 SI=SIN(EW)*C1-TAN(EN)*S1
  160. 9040 CO=COS(EW):GOSUB 9900
  161. 9050 RA=TH:IF RA<0 THEN RA=RA+TP
  162. 9060 RETURN
  163. 9100 T1=GS/24-RA/TP:GH=TP*FNC(T1)
  164. 9110 LH=GH+E
  165. 9120 SI=COS(LH)*COS(DC)*COS(N)+SIN(DC)*SIN(N)
  166. 9130 CO=SQR(1-SI*SI):GOSUB 9900
  167. 9140 EL=TH
  168. 9150 RETURN
  169. 9200 SI=-SIN(LH)*COS(DC)*COS(N)
  170. 9210 CO=SIN(DC)-SIN(N)*SIN(EL):GOSUB 9900
  171. 9220 AZ=TH:IF AZ<0 THEN AZ=AZ+TP
  172. 9230 RETURN
  173. 9300 GOSUB 9400:IF TR<0 THEN RETURN
  174. 9310 T3=GS
  175. 9320 GS=TR:GOSUB 9600:TR=TM
  176. 9330 GS=TS:GOSUB 9600:TS=TM
  177. 9340 GS=T3:RETURN
  178. 9400 CO=SIN(DC)/COS(N)
  179. 9410 IF ABS(CO)>1 GOTO 9490
  180. 9420 SI=SQR(1-CO*CO):GOSUB 9900
  181. 9430 AR=TH:AS=TP-AR
  182. 9440 CO=-TAN(N)*TAN(DC)
  183. 9450 SI=SQR(1-CO*CO):GOSUB 9900
  184. 9460 TR=24*FNC((RA-TH-E)/TP)
  185. 9470 TS=24*FNC((RA+TH-E)/TP)
  186. 9480 RETURN
  187. 9490 TR=-1:TS=-1:RETURN
  188. 9500 MT=INT(TM*60+.5):HR=INT(MT/60)
  189. 9510 MT=MT-HR*60:RETURN
  190. 9600 T1=(GS-SE-.0657098*(DN-DE))/24
  191. 9610 TM=23.9345*(T1-INT(T1))
  192. 9620 RETURN
  193. 9700 T1=(SE+.0657098*(DN-DE)+GM*1.00274)/24
  194. 9710 GS=24*FNC(T1)
  195. 9720 RETURN
  196. 9800 T1=YR-1
  197. 9810 DE=INT(365.25*(T1-1980))-INT(T1/100)+INT(T1/400)+381
  198. 9820 T1=(DE+29218.5)/36525!
  199. 9830 T1=6.6460656#+T1*(2400.051262#+T1*2.581E-05)
  200. 9840 SE=T1-24*(YR-1900)
  201. 9850 RETURN
  202. 9900 T1=ABS(SI):T2=ABS(CO)
  203. 9910 IF T1>T2 THEN TH=PT-ATN(T2/T1)
  204. 9920 IF T1<=T2 THEN TH=ATN(T1/T2)
  205. 9930 IF CO<0 THEN TH=PI-TH
  206. 9940 IF SI<0 THEN TH=-TH
  207. 9950 RETURN
  208. 9999 '   Routine to calculate true anomaly by Kepler's equation
  209. 10000 EA=MA
  210. 10010 T1=EA-EO*SIN(EA)-MA
  211. 10020 IF ABS(T1)<.0000001 GOTO 10050
  212. 10030 EA=EA-T1/(1-EO * COS(EA))
  213. 10040 GOTO 10010
  214. 10050 TA=SQR((1+EO)/(1-EO))*TAN(EA/2)
  215. 10060 TA=2*ATN(TA)
  216. 10070 RETURN
  217. 11010 LPRINT:LPRINT D$,DY;" ";MN$;" ";YR
  218. 11020 LPRINT:LPRINT
  219. 11100 LPRINT"  GMT";TAB(15);"AZIMUTH";TAB(25);"ELEVATION";TAB(43);"ECHO (Hz)"
  220. 11110 RETURN
  221. 12135 IF MT=0 OR MT=30 THEN LPRINT
  222. 12140 LPRINT  HR;":";MT;TAB(16);
  223. 12150 LPRINT USING "###.#"; FNA(AZ);
  224. 12160 LPRINT TAB(28);:LPRINT USING "##.#";FNA(EL);:LPRINT TAB(45);INT(DV)
  225. 12170 RETURN
  226. 15000 FOR I=1 TO 24:FOR J=6 TO 1 STEP -1
  227. 15010 READ SKY(I,J):NEXT J:NEXT I
  228. 15018 '   400MHz sky temperatures, from R E Taylor, Proc IEEE Apr 1973 p469
  229. 15019 '   I=GHA; J=Dec 30to20,20to10,...,-20to-30; ie grid is 15x10 degrees.
  230. 15020 DATA 23,23,23,25,25,22, 25,25,25,25,25,20, 30,30,27,24,20,19, 30,30,24,22,18,18
  231. 15030 DATA 35,33,25,23,19,16, 43,41,34,30,24,17, 35,38,35,35,32,25, 25,25,28,30,34,32
  232. 15040 DATA 17,17,17,19,22,28, 15,16,15,18,20,23, 17,17,17,17,19,22, 18,18,19,20,23,23
  233. 15050 DATA 20,24,26,25,25,25, 24,30,25,25,26,30, 33,35,28,28,32,34, 38,42,35,32,36,43
  234. 15060 DATA 42,55,44,40,48,80, 38,50,70,90,110,200, 60,80,120,160,150,180, 70,75,100,90,70,50
  235. 15070 DATA 55,40,40,34,29,29, 45,27,22,28,25,22, 27,27,20,20,21,20, 23,23,21,23,25,22
  236. 15080 RETURN
  237. 15100 GHA=INT(1+RA*RD/15):DEC=INT(DC*RD/10)+4
  238. 15109 '   400MHz temperatures corrected to 432MHz by (400/432)^2.4 = 1/1.2
  239. 15110 PRINT;TAB(61);INT(SKY(GHA,DEC)/1.2)
  240. 15120 RETURN
  241.